package com.hfut.eeg.controller;

import com.hfut.eeg.common.api.CommonResult;
import com.hfut.eeg.common.util.GenerateCommon;
import com.hfut.eeg.dto.OrderPatientInfo;
import com.hfut.eeg.dto.Ordertable;
import com.hfut.eeg.service.OrdertableService;
import com.hfut.eeg.service.PatientInfoService;
import com.hfut.eeg.service.SystemUserTimeService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

import java.sql.Date;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

/*
* @auther tjf
* 病人预约模块
* 对病人预约进行增删改查操作
* */
@Controller
@Api(tags = "OrdertableController", value = "预约表")
@RequestMapping("/order")
public class OrdertableController {
    @Autowired
    private OrdertableService ordertableService;

    @Autowired
    private PatientInfoService patientInfoService;

    @Autowired
    private SystemUserTimeService systemUserTimeService;

    @Autowired
    private GenerateCommon common;

    /*
    * 病人预约时，填写病人相应信息
    * 传入的参数类型是OrderPatientInfo类
    * 为病人自动创建id
    * 将病人信息插入到数据库中
    * */
    @ApiOperation("添加病人信息")
    @RequestMapping(value = "/orderpatient", method = RequestMethod.POST)
    @ResponseBody
    public CommonResult orderPatientInfo(@RequestBody OrderPatientInfo orderPatientInfo) {

        common.initID(patientInfoService);
        orderPatientInfo.setPatientId(common.generateID(patientInfoService));
        //做一个判断，看病人表里病人的id是否存在，如果存在，则重新创建一个病人id
        String id = ordertableService.selectid(orderPatientInfo.getPatientId());
        /*
        * while循环，看病人表里病人的id是否存在
        * 如果存在，则重新创建一个病人id
        * */
        while (id != null) {
            orderPatientInfo.setPatientId(common.generateID(patientInfoService));
            id = ordertableService.selectid(orderPatientInfo.getPatientId());
        }
        int orderPatientInfo1 = ordertableService.insertOrderPatientInfo(orderPatientInfo);
        if (orderPatientInfo1 != 0) {
            return CommonResult.success(orderPatientInfo);
        } else {
            return CommonResult.failed("操作失败");

        }
    }

    /*
    * 给病人进行预约操作
    * 把病人的id与医生的id以及病人的预约时间插入到数据库预约表中
    * 同时判断今日的预约人数是否达到最大人数
    * */
    @ApiOperation("病人预约")
    @RequestMapping(value = "/insertorder", method = RequestMethod.POST)
    @ResponseBody
    public CommonResult insertOrderInfo(@RequestBody Ordertable ordertable){

        List<String> list = ordertableService.selectcount(ordertable.getTime());
        /*
        * 判断判断今日的预约人数是否达到最大人数
        * 如果没有则可以继续预约
        * 否则选择其他日期
        * */
        if(list.size()<10){
            Ordertable ordertable1 = ordertableService.insertOrder(ordertable);
            if(ordertable1 != null){
                return CommonResult.success(ordertable);
            }else {
                return CommonResult.failed("操作失败");
            }
        }else{
            return CommonResult.failed("今天预约人数已满！选择其他日期");
        }
    }

    /*
    * 删除预约操作
    * 对已经预约的病人进行删除
    * */
    @ApiOperation("删除预约")
    @RequestMapping(value = "/deleteorder", method = RequestMethod.POST)
    @ResponseBody
    public CommonResult deletePatient(@RequestParam(value = "patientId") String patientId){
        int result = ordertableService.deleteOrder(patientId);
        if(result==0){
            return CommonResult.failed("删除病人信息失败");
        }else {
            return CommonResult.success("删除成功");
        }
    }
    /*
    * 根据前端传来的日期
    * 获取该日期段的病人的姓名
    * 返回一个数组给前端
    * */
    @ApiOperation("获取预约病人姓名")
    @RequestMapping(value = "/selectname", method = RequestMethod.POST)
    @ResponseBody
    public CommonResult selectPatientName(@RequestParam(value="time") ArrayList<String> list, Integer ampm){
        List<List> result = ordertableService.selectname(list, ampm);
        if(result == null){
            return CommonResult.failed("获取病人信息失败");
        }else {
            return CommonResult.success(result);
        }


    }

    /*   按照年份Year
     *获取前端传来的时间段，按照年份来查询整年的人数
     *传入的参数是两个日期
     *因为要获取每年的日期，再根据每年获取人数
     * 返回一个list集合
    * */
    @ApiOperation("获取人数")
    @RequestMapping(value = "/getcountByYear", method = RequestMethod.POST)
    @ResponseBody
    public CommonResult count3(Date date1, Date date2){
        if(date1 != null && date2 != null){
            List<Map<String, Object>> result = ordertableService.getCount3(date1,date2);
            if(result == null){
                return CommonResult.failed("获取病人信息失败");
            }else {
                return CommonResult.success(result);
            }
        }else {
            return CommonResult.failed("传入的日期为空！");
        }

    }

    /*
     * 按照月份Month
     *根据前端传来的时间段，按照该时间段查询每个月的人数
     *传入的参数是两个日期
     *因为要获取每月的日期，再根据每月获取人数
     * 返回一个list集合
    * */
    @ApiOperation("获取人数")
    @RequestMapping(value = "/getcountByMonth", method = RequestMethod.POST)
    @ResponseBody
    public CommonResult count4(Date date1, Date date2){
        if(date1 != null && date2 != null){
            List<Map<String, Object>> result = ordertableService.getCount4(date1,date2);
            if(result == null){
                return CommonResult.failed("获取病人信息失败");
            }else {
                return CommonResult.success(result);
            }
        }else {
            return CommonResult.failed("传入的日期为空！");
        }

    }

    /*
     * 按照每天Day
     * 获取前端传来的时间段，按照该时间段查询每天的人数
     *传入的参数是两个日期
     *因为要获取每天的日期，再根据每天获取人数
     * 返回一个list集合
    * */
    @ApiOperation("获取人数")
    @RequestMapping(value = "/getcountByDay", method = RequestMethod.POST)
    @ResponseBody
    public CommonResult count5(@RequestParam("date1") Date date1, @RequestParam("date2") Date date2){
        if(date1 != null && date2 != null){
            List<Map<String, Object>> result = ordertableService.getCount5(date1,date2);
            if(result == null){
                return CommonResult.failed("获取病人信息失败");
            }else {
                return CommonResult.success(result);
            }
        }else {
            return CommonResult.failed("传入的日期为空！");
        }

    }

}
